package com.bruce.demo2.patterns.demo1.creational.demo01.singleton.demo05;

/**
 * @PROJECT_NAME design_patterns
 * @DESCRIPTION 懒汉模式：
 * 双重检查锁的实现方式
 * 解决了单例、性能、线程安全问题
 * @AUTHOR CNBruceLee
 * @DATE 2021/7/2 7:52
 */
public class Singleton {
    //1、构造函数私有化
    private Singleton() {
    }

    //2、定义
    private static Singleton instance;

    //3、对外提供访问方法
    public static Singleton getInstance() {
        //第一次判断如果instance不为null，不进入抢锁阶段，直接返回实例
        if (instance == null) {
            synchronized (Singleton.class) {
                //第二次判断 抢到锁之后再次判断是否为null
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

}
